<?php

namespace app\common\library;

use think\Db;

/**
 * 微信小程序的页面链接处理
 *
 * @author LCY <409028735@qq.com>
 */
class WechatLink
{
    /**
     * 链接的配置信息
     *
     * @var array
     */
    protected $links = [
        [
            'type' => 1, // 链接类型 0静态链接 1动态链接（需要解析传递的参数）
            'key' => 'SERVICE_ID', //动态链接唯一标识，便于查询数据库
            'id' => 1, // 唯一标识
            'title' => '服务详情页',
            'desc' => '', //描述信息，便于人为识别与理解
            'url' => '/pages/path/index?id=', //每个链接最多传递一个动态的参数，且必须放在最后面
        ],
    ];


    /**
     * 获取链接地址列表
     *
     * @return array
     */
    public function getLinks()
    {
        return $this->links;
    }

    /**
     * 获取链接id获取链接的详细信息（包含关联可选的数据集）
     *
     * @param int $id $_config中的链接id
     * @return array
     */
    public function getLinkById($id)
    {
        foreach ($this->getLinks() as $link) {

            if ($link['id'] == $id) {
                if ($link['type'] == 1) {
                    if (!empty($link['key'])) {
                        $items = $this->getItems($link['key'], $link['url']);
                        $link['items'] = $items ?: [];
                    } else {
                        $link['items'] = [];
                    }
                } else {
                    $link['items'] = [];
                }

                return $link;
            }
        }

        return [];
    }



    /**
     * 通过动态的KEY关键词获取多条数据进行选择id
     * 列表中必须包含id和title（表中不同可以别名）
     * @param string $key 关键词KEY
     * @param string $url 原始链接地址（还未解析动态参数）
     * @return array
     */
    protected function getItems($key = '', $url = '')
    {
        $items = [];
        switch ($key) {
            case 'SERVICE_ID':
                $items = Db::name('service')->where('is_show', 1)->field('id,service_name as title')->order('id desc')->select();
                break;
            case 'SERVICE_CATE_ID':
                $items = Db::name('service_category')->where('is_show', 1)->field('id,cate_name as title')->order('sort asc,id asc')->select();
                break;
        }

        if (!empty($items)) {
            foreach ($items as $k => $item) {
                $items[$k]['url'] = $url . $item['id'];
            }
        }

        return $items ?: [];
    }
}
